package com.wgy.day24.List集合接口.LinkedList集合;

import java.util.LinkedList;

/**
 * Created by pc on 2020/11/22 0:12
 * Description: LearningJava
 */
/*
LinkedList集合数据存储的结构是链表结构,方便元素添加,删除的集合

LinkedList集合特点:
     1.底层是一个链表结构,查询慢,增删快
     2.里面包含大量操作首尾元素的方法
LinkedList特有的方法:
     public void addFirst(E e): 将指定元素插入此列表的开头
     public void addLast(E e):  将指定元素插入此列表的结尾  此方法等效于add()
     public void push(E e):     将指定元素推入此列表所示的堆栈

     public E getFirst():  返回此列表的第一个元素
     public E getLast():   返回此列表的最后一个元素

     public E removeFirst(): 移除并返回此列表的第一个元素
     public E removeLast():  移除并返回此列表的最后一个元素
     public E pop():       从此列表所示的堆栈处弹出一个元素  此方法等效于public E removeFirst():

注意事项: 使用LinkedList集合特有方法的时候,不能使用多态
*/
public class Demo02LinkedList {
    public static void main(String[] args) {
        show01();
        show02();
    }

    public static void show01() {
        LinkedList<String> linked = new LinkedList<>();
        linked.add("a");
        linked.add("b");
        linked.add("c");
        System.out.println(linked);//[a, b, c]

        //public void addFirst(E e): 将指定元素插入此列表的开头
        linked.push("world");
        linked.addFirst("hello");

       // public void addLast(E e):  将指定元素插入此列表的结尾  此方法等效于add()
        linked.addLast("中国");
        linked.add("你好");
        System.out.println(linked);//[hello, world, a, b, c, 中国, 你好]

        // public E removeFirst(): 移除并返回此列表的第一个元素
       String removeE= linked.remove(1);
        System.out.println("被移除的元素是:"+removeE);//world
        System.out.println(linked);//[hello, a, b, c, 中国, 你好]

       // public E removeFirst(): 移除并返回此列表的第一个元素
        String first=linked.removeFirst();
        System.out.println("被移除的第一个元素是:"+first);//被移除的第一个元素是:hello
        System.out.println(linked);//[a, b, c, 中国, 你好]

        // public E removeLast():  移除并返回此列表的最后一个元素
        String last=linked.removeLast();
        System.out.println("被移除的最后一个元素是:"+last);//被移除的最后一个元素是:你好
        System.out.println(linked);//[a, b, c, 中国]

       // public E getFirst():  返回此列表的第一个元素
        String first1=linked.getFirst();
        System.out.println("集合的第一个元素是:"+first1);

       // public E getLast():   返回此列表的最后一个元素
        String last1=linked.getLast();//集合的第一个元素是:a
        System.out.println("集合的最后一个元素是:"+last1);//集合的最后一个元素是:中国

       // public E pop():       从此列表所示的堆栈处弹出一个元素  等效于public E removeFirst():
        String first2=linked.pop();
        System.out.println(first2);//a
        System.out.println(linked);//[b, c, 中国]

    }
    public static void show02() {
        LinkedList<String> linked = new LinkedList<>();
        linked.add("a");
        linked.add("b");
        linked.add("c");
     //   linked.clear();清空集合中的元素,再获取集合中的元素就会抛出异常 NoSuchElementExcept,
        //   所以在进行获取集合元素的时候尽量先进行判断集合内是否有元素,然后再进行获取
        if(!linked.isEmpty()){
            String first=linked.getFirst();
            System.out.println(first);
            String last=linked.getLast();
            System.out.println(last);
        }

    }
}
